package com.xlx.openLink.snmp.service;

import com.xlx.openLink.base.SnmpException;
import com.xlx.openLink.snmp.base.SNMPTarget;
import net.percederberg.mibble.MibValueSymbol;

import java.io.IOException;
import java.util.List;

/**
 * @author Admin
 */
public interface SNMPAPI {

    int RowStatusEntryActive = 1;
    int RowStatusEntryAdd = 4;
    int RowStatusEntryDel = 6;
    String MessageNoSuchOID = "MIB OID不存在";
    String MessageSNMPTimeOut = "SNMP没有应答";

    /**
     * 检查设备snmp是支持
     *
     * @param snmpTarget
     * @throws SnmpException
     */
    boolean checkSnmpAgentActive(SNMPTarget snmpTarget) throws SnmpException;

    /**
     * 设置mib节点的数值
     *
     * @param OID
     * @param value
     * @param var3
     * @param snmpTarget
     * @throws SnmpException
     */
    void setOIDValue(String OID, String value, String var3, SNMPTarget snmpTarget) throws SnmpException;

    /**
     * h获取oid的值
     *
     * @param oid
     * @param snmpTarget
     * @return
     * @throws SnmpException
     */
    String getOIDValue(String oid, SNMPTarget snmpTarget) throws SnmpException;

    /**
     * 获取Long型的oid值
     *
     * @param oid
     * @param snmpTarget
     * @return
     * @throws SnmpException
     */
    Long getOIDLongValue(String oid, SNMPTarget snmpTarget) throws SnmpException;

    /**
     * 获取下一个节点的值
     *
     * @param oid
     * @param snmpTarget
     * @return
     * @throws SnmpException
     */
    String getNextOIDValue(String oid, SNMPTarget snmpTarget) throws SnmpException;

    /**
     * 获取snmp组的值
     *
     * @param obj
     * @param snmpTarget
     * @return
     * @throws SnmpException
     * @throws IOException
     */
    Object getMibObject(Object obj, SNMPTarget snmpTarget) throws SnmpException, IOException;

    /**
     * 更新snmp数据
     *
     * @param obj
     * @param snmpTarget
     * @throws SnmpException
     */
    void update(Object obj, SNMPTarget snmpTarget) throws SnmpException;

    /**
     * 获取全部数
     *
     * @param clazz
     * @param snmpTarget
     * @return
     * @throws SnmpException
     */
    List getAllTableData(Class clazz, SNMPTarget snmpTarget) throws SnmpException;

    /**
     * 获取全部表格数据的值
     *
     * @param snmpTarget
     * @param oids
     * @return
     * @throws SnmpException
     * @throws IOException
     */
    List<List<String>> getAllOIDTableData(SNMPTarget snmpTarget, List<String> oids) throws SnmpException, IOException;

    /**
     * 更新snmp表格数据
     *
     * @param object
     * @param snmpTarget
     * @throws SnmpException
     * @throws IOException
     */
    void addTableRow(Object object, SNMPTarget snmpTarget) throws SnmpException, IOException;

    /**
     * 删除snmp表格数据
     *
     * @param object
     * @param snmpTarget
     * @throws SnmpException
     */
    void delTableRow(Object object, SNMPTarget snmpTarget) throws SnmpException;

}
